package competition;

import org.omg.PortableInterceptor.INACTIVE;

import java.util.*;

/**
 * @BelongsProject: LeetCode
 * @BelongsPackage: competition
 * @Author: 江岸
 * @CreateTime: 2021-04-05 15:01
 * @Description: 春季力扣杯
 */
public class LCCUP29 {


    /**
     * 小力将 N 个零件的报价存于数组 nums。小力预算为 target，假定小力仅购买两个零件，要求购买零件的花费不超过预算，请问他有多少种采购方案。
     *
     * 注意：答案需要以 1e9 + 7 (1000000007) 为底取模，如：计算初始结果为：1000000008，请返回 1
     *
     * 示例 1：
     *
     * 输入：nums = [2,5,3,5], target = 6
     *
     * 输出：1
     *
     * 解释：预算内仅能购买 nums[0] 与 nums[2]。
     *
     * 示例 2：
     *
     * 输入：nums = [2,2,1,9], target = 10
     *
     * 输出：4
     *
     * 解释：符合预算的采购方案如下：
     * nums[0] + nums[1] = 4
     * nums[0] + nums[2] = 3
     * nums[1] + nums[2] = 3
     * nums[2] + nums[3] = 10
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/4xy4Wx
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     */
    public int purchasePlans(int[] nums, int target) {
        Arrays.sort(nums);
        int res = 0;
        int left = 0;
        int right = nums.length-1;
        while (left<right){
            if (nums[left]+nums[right]>target){
                right--;
            }else {
                res = res + right -left;
                left++;
            }
        }
        return res%1000000007;

    }

    /**
     * 某乐团的演出场地可视作 num * num 的二维矩阵 grid（左上角坐标为 [0,0])，每个位置站有一位成员。乐团共有 9 种乐器，乐器编号为 1~9，每位成员持有 1 个乐器。
     *
     * 为保证声乐混合效果，成员站位规则为：自 grid 左上角开始顺时针螺旋形向内循环以 1，2，...，9 循环重复排列。例如当 num = 5 时，站位如图所示
     *
     *
     *
     * 请返回位于场地坐标 [Xpos,Ypos] 的成员所持乐器编号。
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/SNJvJP
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     */
    public static int orchestraLayout(int num, int xPos, int yPos) {
        long numm = num;
        //外围圈圈数
        int x = (int) Math.min(Math.min(numm-1-xPos,numm-1-yPos),Math.min(xPos,yPos));
        System.out.println(x);
        //计算外围圈圈的元素个数
        long qq = 0;
//        for (int i=0;i<x;i++){
//            qq = (qq + 4*(numm-2*i)-4)%9;
//        }
//        System.out.println("qq"+qq);
//        qq = qq%9;
//        System.out.println("qq"+qq);
        qq = 4*x*(numm-x)%9;
        //计算内层位置
        xPos = xPos - x;
        yPos = yPos - x;
        //当前层有几个
        long cur = numm - 2*x;
        long temp=0;
        if (xPos==0){
            temp = yPos+1;
        }else if (yPos==cur-1){
            temp = cur + xPos;
        }else if (xPos ==cur-1){
            temp = cur + cur -1 + (cur-yPos-1);
        }else if (yPos ==0){
            temp = 3 * cur -2 +(cur -xPos -1);
        }
        qq = (qq + temp)%9;
        if(qq==0) return 9;
        return (int) qq;
    }

    public static void main(String[] args) {
        System.out.println(orchestraLayout(168965696,
                120095590,
                73889068));

    }
}
